package cn.crawler.framework.util;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nutz.lang.Strings;

import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;

public class JSONUtil {
    public static <T> T parseStringToJavaBean(Class clazz,String str){
        if (Strings.isEmpty(str)) {
            str = "{}";
        }
        return ((JSONObject)JSON.parse(str)).toJavaObject((Type) clazz);
    }
    public static <T> T toJavaBean(Class<T> clazz,Object obj){
        return JSON.toJavaObject((JSON) JSONObject.toJSON(obj),clazz);
    }

    public static String createJSONString(String... args){
        JSONObject jsonObject = new JSONObject();
        for (int i = 0; i < args.length; i+=2) {
            jsonObject.put(args[i],args[i+1]);
        }
        return jsonObject.toJSONString();
    }

    public static String toJSONString(Object obj) {
        return JSONObject.toJSONString(obj);
    }

    public static<T> T parseJavaBean(Class<T> clazz, Object object) {
        return JSONObject.toJavaObject((JSONObject)JSONObject.toJSON(object),clazz);
    }

    public static JSONObject parseToJSON(String jsonString) {
        return (JSONObject) JSONObject.parse(jsonString);
    }
    public static JSONArray parseToJSONArray(String jsonString) {
        return (JSONArray) JSONArray.parse(jsonString);
    }

    public static String toJSONArrayString(Collection obj) {
        return JSONArray.toJSONString(obj);
    }


    public static <T> List<T> parseStringToJavaList(Class<T> clazz, String str) {
        if (Strings.isEmpty(str)) {
            str = "[]";
        }
        return JSONArray.parseArray(str,clazz);
    }

    public static JSONObject createJSON(Object... args) {
        JSONObject jsonObject = new JSONObject();
        for (int i = 0; i < args.length; i+=2) {
            jsonObject.put(args[i].toString(),args[i+1]);
        }
        return jsonObject;
    }

    public static JSONArray createArray(JSONObject... jsons){
        JSONArray array = new JSONArray();
        for (JSONObject json : jsons) {
            array.add(json);
        }
        return array;
    }

    public static JSONObject toJSON(Object o) {
        return (JSONObject) JSONObject.toJSON(o);
    }
}
